home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / C⁄C++ / graph3D / graph3D source / g3D_setUp.c < prev    next >
Text File  |  1993-09-17  |  7KB  |  407 lines

  1. /*
  2.     Copyright '89    Christopher Moll
  3.     all rights reserved
  4. */
  5.  
  6.  
  7. #include    "graph3D.h"
  8. #ifdef    _LSC3_
  9. #    include <ColorToolbox.h>
  10. #    include <WindowMgr.h>
  11. #    include <EventMgr.h>
  12. #    include <MenuMgr.h>
  13. #    include <FileMgr.h>
  14. #    include <TextEdit.h>
  15. #    include <ScrapMgr.h>
  16. #endif
  17.  
  18.  
  19.  
  20. /* windows */
  21. extern    GrafPtr            windManPort;
  22.  
  23. extern    WindowPtr        graphWind;
  24. WindowRecord    fwindRecord;
  25. WindowRecord    gwindRecord;
  26.  
  27.  
  28. extern    Point        *graphPoints;    /* same elements as funcResults */
  29.  
  30. extern    Real    startX, startY;
  31. extern    Real    endX, endY;
  32. extern    Real    deltaX, deltaY;
  33. extern    int        numX, numY;
  34.  
  35. extern    Boolean        vectrsCurrent;
  36.  
  37. extern    Vector        maxVect, minVect;
  38. extern    Real        rotMatrx[3][3];
  39. extern    Boolean        functCurrent;
  40.  
  41. extern    Real        *funcResults;
  42. extern    Vector        *scalVectResults;
  43.  
  44.  
  45.  
  46. /* menus */
  47. extern    MenuHandle        appleMenu, fileMenu, editMenu, plotMenu,
  48.                         gTypeMenu, windwMenu;
  49.  
  50. extern    int            scrapCompare;    /* status of the deskscrap (clipboard) */
  51. extern    Boolean        scrapDirty;        /* deskscrap has been changed */
  52.  
  53. extern    Boolean            inMultiFndr;
  54. extern    Boolean            colorQD, scrnColor;
  55.  
  56. extern    PatternList    *greyList;
  57. extern    int        numGrays;
  58.  
  59. extern    long    MoveToAddr, LineToAddr, FixMulAddr;
  60.  
  61. OSErr    SendPort(...);
  62.  
  63.  
  64. DoSetup()
  65. {
  66.     Init();
  67.     OpenSerPort();
  68.     AddrsSet();
  69.  
  70.     scrapCompare = ScrapInfo.scrapCount + 1;
  71.     scrapDirty = FALSE;
  72.     ReadDeskScrap();
  73.  
  74.     InitColor();
  75.     MakeWindows();
  76.     MakeMenus();
  77.     InitPts();
  78.     CheckMultiFndr();
  79. }
  80.  
  81. static
  82. InitColor()
  83. {
  84.     PattListHand    greyHndl;
  85.     SysEnvRec        theWorld;
  86.     GDHandle        grefDev;
  87.     int                depth;
  88.     Boolean        ScrnHasColor();
  89.  
  90.     greyHndl = (PattListHand)GetResource('PAT#', 256);
  91.     if (greyHndl)
  92.     {
  93.         MoveHHi(greyHndl);
  94.         HLock(greyHndl);
  95.         greyList = *greyHndl;
  96.     }
  97.  
  98.     SysEnvirons(1, &theWorld);
  99. #ifdef    _MC68881_
  100.     if (theWorld.processor < env68020)
  101.     {
  102.         Alert(ALERT_020, NIL);
  103.         ExitToShell();
  104.     }
  105.     else if (NOT(theWorld.hasFPU))
  106.     {
  107.         Alert(ALERT_881, NIL);
  108.         ExitToShell();
  109.     }
  110. #endif
  111.     colorQD = theWorld.hasColorQD;
  112.     scrnColor = ScrnHasColor();
  113. }
  114.  
  115. Boolean
  116. ScrnHasColor()
  117. {
  118.     int                depth;
  119.     GDHandle        grefDev;
  120.  
  121.     if (colorQD)
  122.     {
  123.         grefDev = GetGDevice();
  124.         depth = (**((**grefDev).gdPMap)).pixelSize;
  125.         return(depth > 1);
  126.     }
  127.     else
  128.         return(FALSE);
  129. }
  130.  
  131. static
  132. CheckMultiFndr()
  133. {
  134.     long    WaitAdrs, unimpAdrs;
  135.  
  136.     WaitAdrs = GetTrapAddress(0x60);
  137.     unimpAdrs = GetTrapAddress(0x9f);
  138.     if (WaitAdrs EQ unimpAdrs)
  139.         inMultiFndr = FALSE;
  140.     else
  141.         inMultiFndr = TRUE;
  142. }
  143.  
  144.  
  145. Init()
  146. {
  147.     InitGraf(&thePort);
  148.     InitFonts();
  149.     InitWindows();
  150.     InitMenus();
  151.     TEInit();
  152.     InitDialogs(0L);
  153.     InitCursor();
  154.  
  155.     FlushEvents(everyEvent, 0);
  156.  
  157.     GetWMgrPort(&windManPort);    /* get whole screen port that window mgr
  158.                    uses */
  159.     SetPort(windManPort);    /* and start off with it */
  160.  
  161.     SetEventMask(everyEvent);
  162. }
  163.  
  164. MakeWindows()
  165. {
  166.     Rect editRect;
  167.  
  168.     ShowSpecs();
  169.     if (colorQD)
  170.         graphWind = GetNewCWindow(WIND_GRAPH, &gwindRecord, (WindowPtr)-1L);
  171.     else
  172.         graphWind = GetNewWindow(WIND_GRAPH, &gwindRecord, (WindowPtr)-1L);
  173.     ShowWindow(graphWind);
  174.     SetPort(graphWind);
  175.     SetGraphRect();
  176.     ShowLimits();
  177.     ShowFunctDial();
  178. }
  179.  
  180. MakeMenus()
  181. {
  182.     appleMenu = GetMenu(MENU_APPLE);
  183.     AddResMenu(appleMenu, 'DRVR');
  184.     InsertMenu(appleMenu, 0);
  185.  
  186.     fileMenu = GetMenu(MENU_FILE);
  187.     InsertMenu(fileMenu, 0);
  188.  
  189.     editMenu = GetMenu(MENU_EDIT);
  190.     InsertMenu(editMenu, 0);
  191.  
  192.     plotMenu = GetMenu(MENU_PLOT);
  193.     InsertMenu(plotMenu, 0);
  194.  
  195.     gTypeMenu = GetMenu(MENU_GTYP);
  196.     InsertMenu(gTypeMenu, 0);
  197.     CheckItem(gTypeMenu, 1, TRUE);
  198.  
  199.     windwMenu = GetMenu(MENU_WIND);
  200.     InsertMenu(windwMenu, 0);
  201.     
  202.     CheckItem(plotMenu, PLOT_WIREFRAM, TRUE);
  203.  
  204.     DrawMenuBar();
  205. }
  206.  
  207. InitPts()
  208. {
  209.     register    long    i, numElems;
  210.     register    Real    *resltsPtr;
  211.  
  212.     MkRotMat(0.0, -.3, -.3, rotMatrx);
  213.  
  214.     GetSpecDCont();
  215.     GetLimtDCont();
  216.  
  217.     numX = numY = 20;
  218.  
  219.     deltaX = (endX - startX) / numX;
  220.     deltaY = (endY - startY) / numY;
  221.  
  222.     funcResults = (Real *)NewPtr((long)sizeof(Real) * (long)numX * numY);
  223.     if (MemErr)
  224.         goto Fail;
  225.     scalVectResults = (Vector *)NewPtr((long)sizeof(Vector) * (long)numX * numY);
  226.     if (MemErr)
  227.         goto Fail;
  228.     graphPoints = (Point *)NewPtr((long)sizeof(Point) * (long)numX * numY);
  229.     if (MemErr)
  230.         goto Fail;
  231.  
  232.     resltsPtr = funcResults;
  233.     numElems = (long)numX * numY;
  234.     for (i = 0; i < numElems; i++)
  235.         *resltsPtr++ = 0.0;
  236.  
  237.     maxVect.x = 0.0;
  238.     maxVect.y = 0.0;
  239.     maxVect.z = 0.0;
  240.     minVect.x = 0.0;
  241.     minVect.y = 0.0;
  242.     minVect.z = 0.0;
  243.  
  244.     vectrsCurrent = FALSE;
  245.     functCurrent = TRUE;
  246.     return;
  247.  
  248. Fail:
  249.     GenralAlert("\PToo little memory to run; returning to Finder");
  250.     ExitToShell();
  251. }
  252.  
  253.  
  254.  
  255. static    long    rtrnAdrs;
  256. static    char    buffer[256];
  257.  
  258. tprintf()
  259. {
  260.     asm    {
  261.         move.l    (sp)+,rtrnAdrs
  262.         }
  263.     sprintf(buffer);
  264.     SendPort(buffer, strlen(buffer));
  265.     asm    {
  266.         move.l    rtrnAdrs,a0
  267.         jmp        (a0)
  268.         }
  269. }
  270.  
  271. scprintf()
  272. {
  273.     asm    {
  274.         move.l    (sp)+,rtrnAdrs
  275.         }
  276.     sprintf(buffer);
  277.     My_printf(buffer);
  278.     asm    {
  279.         move.l    rtrnAdrs,a0
  280.         jmp        (a0)
  281.         }
  282. }
  283.  
  284. /*flprintf()
  285. {
  286.     asm    {
  287.         move.l    (sp)+,rtrnAdrs
  288.         }
  289.     sprintf(buffer);
  290.     AppendTempFile(buffer);
  291.     asm    {
  292.         move.l    rtrnAdrs,a0
  293.         jmp        (a0)
  294.         }
  295. }*/
  296.  
  297. static
  298. _My_printf(shwStr)
  299. char    *shwStr;
  300. {
  301.     char    buffer[256];
  302. static    Rect    dispRect = {67, 54, 87, 166};
  303.  
  304.     ClipRect(&dispRect);
  305.     EraseRect(&dispRect);
  306.     MoveTo(dispRect.left + 10, dispRect.bottom - 4);
  307.     strcpy(buffer, shwStr);
  308.     ctop(buffer);
  309.     DrawString(buffer);
  310. }
  311.  
  312. static    IOParam        portParam;
  313.  
  314. /*** open printer port ***/
  315. OpenSerPort()
  316. {
  317.     portParam.ioCompletion = 0L;
  318.     portParam.ioNamePtr = (StringPtr)("\p.BOut");
  319.     portParam.ioRefNum = 0;
  320.     portParam.ioPermssn = fsWrPerm;
  321.     portParam.ioMisc = 0L;
  322.  
  323.     PBOpen(&portParam, FALSE);
  324.     if (portParam.ioResult);
  325.         /*if (portParam.ioResult EQ -98)
  326.             GenralAlert("\PAppleTalk connected; won't be able to print");
  327.         
  328.         else
  329.             GenralAlert("\PError opening printer port");*/
  330. }
  331.  
  332. static
  333. OSErr
  334. SendPort(buffer, length)
  335. char    *buffer;
  336. int        length;
  337. {
  338.     portParam.ioBuffer = buffer;
  339.     portParam.ioReqCount = length;
  340.     portParam.ioPosMode = fsAtMark;
  341.  
  342.     PBWrite(&portParam, FALSE);
  343.     buffer[portParam.ioActCount] = '\0';
  344.     return(portParam.ioResult);
  345. }
  346.  
  347.  
  348.  
  349.  
  350. _SetGray(theColor, greyShd)
  351. register    RGBColor    *theColor;
  352. register    int        greyShd;
  353. {
  354.     int        setColor;
  355.  
  356.     setColor = greyShd << 8;
  357.  
  358.     theColor->red = setColor;
  359.     theColor->green = setColor;
  360.     theColor->blue = setColor;
  361. }
  362.  
  363. SetGray(greyShd)
  364. register    int        greyShd;
  365. {
  366.     if (scrnColor)
  367.     {
  368.         if (greyShd EQ 0)
  369.             PmForeColor(1);
  370.         else if (greyShd EQ 255)
  371.             PmForeColor(0);
  372.         else
  373.             PmForeColor(256 - greyShd);
  374.     }
  375.     else
  376.         PenPat(greyList->patList + (63 - greyShd));
  377. }
  378.  
  379.  
  380. __SetGray(greyShd)
  381. register    int        greyShd;
  382. {
  383.     RGBColor    theColor;
  384. register    int        setColor;
  385.  
  386.     if (greyShd < 0)
  387.         setColor = 0;
  388.     else if (greyShd < 12)
  389.         setColor = greyShd * 5462;
  390.     else
  391.         setColor = 0xffff;
  392.  
  393.     theColor.red = setColor;
  394.     theColor.green = setColor;
  395.     theColor.blue = setColor;
  396.     RGBForeColor(&theColor);
  397. }
  398.  
  399. static
  400. AddrsSet()
  401. {
  402.     MoveToAddr = GetTrapAddress(MoveToTrapNum);
  403.     LineToAddr = GetTrapAddress(LineToTrapNum);
  404.     FixMulAddr = GetTrapAddress(FixMulTrapNum);
  405. }
  406.  
  407.